// src/utils/clipboard.js

import { ElMessage } from 'element-plus';

/**
 * 一个健壮的、向下兼容的文本复制到剪贴板的函数。
 * 它会优先尝试现代、安全的 Clipboard API，如果失败则降级使用传统方法。
 * @param {string} text - 需要被复制到剪贴板的文本。
 * @returns {Promise<void>} - 一个在操作完成后解析的 Promise。
 */
export const copyToClipboard = async (text) => {
    // Plan A: 尝试使用现代、安全的 Clipboard API
    // navigator.clipboard 只有在安全上下文 (HTTPS, localhost) 中才可用
    if (navigator.clipboard && window.isSecureContext) {
        try {
            await navigator.clipboard.writeText(text);
            ElMessage.success('已复制到剪贴板');
            return; // 成功后直接返回
        } catch (err) {
            console.warn('使用 navigator.clipboard 失败，将降级处理:', err);
            // 如果失败（例如用户拒绝权限），则会继续尝试 Plan B
        }
    }

    // Plan B: 降级使用传统的 document.execCommand 方法
    // 这是一个兼容性极好的备用方案
    console.log('正在使用 document.execCommand 进行复制...');
    const textArea = document.createElement('textarea');
    textArea.value = text;

    // 关键：将 textarea 移到屏幕外，防止它闪烁或影响布局
    textArea.style.position = 'fixed';
    textArea.style.top = '-9999px';
    textArea.style.left = '-9999px';

    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand('copy');
        if (successful) {
            ElMessage.success('已复制到剪贴板');
        } else {
            throw new Error('document.execCommand 返回 false');
        }
    } catch (err) {
        console.error('使用 document.execCommand 复制失败:', err);
        ElMessage.error('复制失败，您的浏览器可能不支持此操作');
    } finally {
        // 无论成功与否，都从DOM中移除这个临时元素
        document.body.removeChild(textArea);
    }
};